package com.kobeliu.netty;

import com.kobeliu.netty.http.HttpServerInitializer;
import com.kobeliu.netty.websocket.WSServerInitializer;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * netty 服务器
 * 用于构建和启动当前服务
 */
public class NettyServer {

    public static void main(String[] args) throws InterruptedException {
        //定义主从线程组

        //定义主线程组 用于接受客户端连接，但是不做任何处理
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        //从线程组 执行者 处理主线程丢过来的任务
        EventLoopGroup workerGroup = new NioEventLoopGroup();

        try{
            //创建netty服务器
            //定义启动类
            ServerBootstrap server = new ServerBootstrap();
            //绑定关系
            server.group(bossGroup,workerGroup) //绑定主从
                    .channel(NioServerSocketChannel.class) //设置NIO的双向通道
                    .childHandler(new WSServerInitializer()) //用于处理任务的管理器
            ;

            //启动server 并且绑定端口，同时启动服务器
            ChannelFuture future = server.bind(875).sync();

            //监听关闭的channel
            future.channel().closeFuture().sync();
        }finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }


    }

}
